﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using wpfArVideo;

namespace ModuloPartidas
{
    public class Jugador
    {
        
        //Constructor
        public Jugador() 
        {}

        public void jugar(String nj)
        { 
            //Envia al servidor un mensaje indicando que el jugador esta listo para comenzar la partida
            ARBDDataContext bd = new ARBDDataContext();

            var q = from p in bd.participacions
                    where p.Usuario== nj
                    select p;
            participacion j = q.First<participacion>();
            j.listo = "Si";
            bd.SubmitChanges();
        }

        public string seleccionarPartida(String par, String j)
        {
            //Envia al servidor la seleccion de la partida por parte del jugador
            string error = null;
            ARBDDataContext bd = new ARBDDataContext();
            
            var q = from p in bd.partidas
                    where p.nombre == par
                    select p;

            if (q.First<partida>() == null)
            {
                error = "Error";
            }
            else
            {
               // party = q.First<partida>();
                var q2 = (from p2 in bd.participacions
                         where p2.Id_partida == par
                         select p2).Count();
                int contador = (int) q2;
                partida aux = q.First<partida>();

                if (contador < aux.num_jugadores)
                {
                    participacion npar = new participacion();
                    npar.Id_partida = par;
                    npar.Usuario = j;
                    npar.puntuacion = 0;
                    npar.listo = "No";
                    npar.terminado = "No";
                    npar.tiempo_final = "";
                    npar.tf_segundos = 0;
                    bd.participacions.InsertOnSubmit(npar);
                    bd.SubmitChanges();
                }
                else
                {
                    error = "Partida llena";
                }
            }
            return error;
        }



        public bool realizarPrueba(Prueba p, string respuesta)
        {
            if (p.RespuestaCorrecta == respuesta)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        
        public bool realizarPrueba(string id, string respuesta)
        {
            //Envia al servidor la respuesta a una prueba indicadad con su id
            //Y contesta si es correcta o no
            ARBDDataContext bd = new ARBDDataContext();
            var q = from t in bd.pruebas
                    where t.identificador == id
                    select t;
            prueba p = q.First<prueba>();
            if (p.respcorrecta == respuesta)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        public bool reconocerPatron(string id) 
        {
            //Reconocimiento del codigo enfocado
            //Comprueba que es el siguiente código que hay que leer
            ARBDDataContext bd = new ARBDDataContext();
            var q = from t in bd.pruebas
                    where t.sig_prueba == id
                    select t;
            if (q.FirstOrDefault() != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool abandonar (string n)
        { 
            // Deja la partida en juego
            ARBDDataContext bd = new ARBDDataContext();
            var q = from t in bd.participacions
                    where t.Usuario == n
                    select t;
            if (q.FirstOrDefault() != null)
            {
                string np = q.First().Id_partida;
                bd.DELETE_PARTICICPACION(n, np);
                //List<participacion> l = q.ToList<participacion>();
                //bd.participacions.DeleteAllOnSubmit(q);
                bd.SubmitChanges();
                Partida p = new Partida();
                p.borrarPartida(np);
                return true;
            }
            else return false;
        }

      
        public void salir(string n)
        {
            //Sale de la aplicacion
            ARBDDataContext bd = new ARBDDataContext();
            var q = from t in bd.jugadors
                    where t.Usuario == n
                    select t;
            if (q.FirstOrDefault() != null)
            {
                jugador j = q.First();
                j.Connected = "No";
                bd.SubmitChanges();
            }
        }
    }
}
